package com.mars.quartz.quartzdemo.demo;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @Author mars
 * @Description  Scheduler的执行 JobDetail + Trigger
 * 1.Job与 JobDetail拆分，并发执行时，每个Job都会new 一个JobDetail
 * @Date
 * @return
 */
public class HelloScheduler {

    public static void main(String[] args) throws SchedulerException {
        // 创建JobDetail,通过builder模式创建
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                // 定义job的名字 和 分组
                .withIdentity("firstJob","group1")
                // 传入自定义参数，外部参数
                .usingJobData("lala","spancer")
                .usingJobData("kaka",15)
                .build();
        // 获取jobDetail内容
//        System.out.println("jobDetail name:" + jobDetail.getKey().getName());
//        System.out.println("jobDetail group:" + jobDetail.getKey().getGroup());
//        System.out.println("jobDetail jobClass:" + jobDetail.getJobClass().getName());

        // 创建Trigger:SimpleTrigger  和 CronTrigger
        // 1.SimpleTrigger
        Trigger trigger = TriggerBuilder.newTrigger()
                // 定义trigger的名字和 分组
                .withIdentity("trigger1","group1")
                // 传入自定义参数
                .usingJobData("free","free")
                // 立即执行
                .startNow()
                // 设置频度,每隔3秒执行一次，重复执行下去
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever())
                .build();

        // 创建scheduler实例，通过factorty创建的
        SchedulerFactory factory = new StdSchedulerFactory();
        Scheduler scheduler = factory.getScheduler();
        // 绑定jobDetail 和 trigger
        scheduler.scheduleJob(jobDetail,trigger);
        // 执行
        scheduler.start();
    }
}
